Como configurar el servidro vsftpd
Para configurar el servidor lo haremos desde el archivo /etc/vsftpd.conf
Si estamos usando vsftpd como servicio tendremos que reiniciarlo al realizar modificaciones con el comando:
systemctl restart vsftpd
Por defecto cuando instalamos el servidor deberíamos de tener acceso con los usuarios creados en el sistema pero solo en modo lectura, la siguiente opción debería de estar habilitada para usar los usuarios locales:
local_enable=YES
Para habilitar la escritura lo hacemos con la siguiente opción:
write_enable=YES
Para poder acceder con el usuario anonímo debemos de tener configuradas las siguientes opciones:
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
Por defecto los usuarios locales no están enjaulados en sus carpetas personales, pueden moverse por todo el sistema de archivos, si queremos que no puedan salir de su carpeta personal podemos enjaularlos usando la siguiente configuracion:
chroot_local_user=YES
Los usuarios estarán limitados a su propia carpeta home, pero si queremos podemos usar la siguiente opción para forzar una carpeta distinta:
local_root=/srv/ftp
NOTA: esta opción puede traernos problemas como veremos a continuacion.
El usuario anonimo (anonymous) a diferencia de los usuarios normales si que está enjaulado dentro de /srv/ftp por defecto.
A la hora de usar chroot se nos puede dar el siguiente error:
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
Este error se da cuando tenemos un usuario enjaulado (aplicando chroot sobre una carpeta), y a su vez este usuario tiene permisos de escritura en dicha carpeta en la que está enjaulado, si queremos evitar este error podemos usar la siguiente configuracion (NO RECOMENDABLE):
allow_writeable_chroot=YES
Este metodo NO ES RECOMENDABLE ya que abre la puerta a ciertas vulnerabilidades de seguridad, como podemos leer aqui
La manera correcta para la utilización del chroot sería la de dejar la carpeta raíz sin permisos de escritura y crear una subcarpeta dentro de esta en la que si que tengamos permisos de escritura.
Esto nos permitirá crear usuarios que no existen en el sistema local, pero que podemos usar exclusivamente para nuestro servidor FTP.
Necesitamos los siguientes paquetes:
zypper in pam-userdb
zypper in db48-utils
A continuación seguimos los siguientes pasos:
useradd -d /srv/ftp-virt/ ftp-virt -s /sbin/nologin
NOTA: Al crear el usuario nos saldrá en la pantalla de login, podemos ocultarlo modificando el archivo /etc/sddm.conf, con el siguiente contenido:
[Users]
HideUsers=ftp-virt
mkdir -p /srv/ftp-virt/user1/my-uploads
chown -R ftp-virt:ftp-virt /srv/ftp-virt/
chmod 555 /srv/ftp-virt/user1/
chmod 775 /srv/ftp-virt/user1/my-uploads
user1
mypass123
db_load -T -t hash -f /etc/vsftpd/userlist /etc/vsftpd/userlist.db
chmod 600 /etc/vsftpd/userlist.db
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuserlist
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuserlist
mkdir /etc/vsftpd/user_conf
local_root=/srv/ftp-virt/user1/
local_umask=002
chroot_local_user=YES
virtual_use_local_privs=YES
guest_enable=YES
guest_username=ftp-virt
user_config_dir=/etc/vsftpd/user_conf/
Una vez hecho esto ya tendríamos nuestro usuario virtual user1 creado y listo para ser utilizado, todo lo que se suba con ese usuario estará en la carpeta /srv/ftp-virt/user1.
Para crear nuevos usuarios podemos utilizar el siguiente script (podemos almacenarlo en /etc/vsftpd/ para usarlo cuando queramos), solo nos preguntará el nombre de usuario y la contraseña, y ya creará todas las configuraciones necesarias, el script es necesario ejecutarlo como root:
#!/bin/bash
FTP_FOLDER="/srv/ftp-virt"
USERLIST_FILE="/etc/vsftpd/userlist"
echo "Nombre usuario:"
read name
echo "Password:"
read pass
echo $name >> "$USERLIST_FILE"
echo $pass >> "$USERLIST_FILE"
db_load -T -t hash -f "$USERLIST_FILE" /etc/vsftpd/userlist.db
mkdir -p "$FTP_FOLDER/$name/my-uploads"
chown -R ftp-virt:ftp-virt "$FTP_FOLDER/$name"
chmod 555 "$FTP_FOLDER/$name"
chmod 775 "$FTP_FOLDER/$name/my-uploads"
echo "local_root=$FTP_FOLDER/$name" > /etc/vsftpd/user_conf/$name
Para borrar un usuario virtual tenemos que eliminarlo de los siguientes sitios:
Linux | ftp | config